layui.define(['layer','table'],function(exports){
    var $ = layui.$,
    table = layui.table;

    let obj={
        /** 2023年11月17日14:16:30
         *  tableins table.reload实例,start 起始页,climit 每页条数,end 总页数,where 携带参数
         *  导出当前页 start==end
         */
        exportExcelByAjax: function(tableins,url,start=1,climit,end=1,where){
            ins1 = tableins;
            //显示loading,并提示:数据下载中,请耐心等待...
            let loading = layer.msg('数据下载中，请耐心等待...', {
            icon: 16,  // 图标代码
            shade: 0.01,  // 遮罩透明度
            time: 0,  // 持续时间，0表示不自动关闭
            });
            let datas = [];
            let promise = Promise.resolve();
            var queue = [];
            var processing = false;
            function ajaxPromise(index, where, limit) {
                return new Promise(function(resolve, reject) {
                    $.ajax({
                        url,
                        data: {...where, page: index, limit: limit},
                        dataType: 'json',
                        type: 'post',
                        success: function(data) {
                            if (data.code == 0 || data.code == 200) {
                            if (data.data.length) {
                                resolve({data:data.data,index});
                            } else {
                                resolve({data:[],index});
                            }
                            } else {
                            reject(data.msg);
                            }
                        },
                        error: function(xhr, status, error) {
                            reject(error);
                        }
                    });
                });
            }

            for (let index = start; index <= end; index++) {
                addToQueue(function() {
                    return ajaxPromise(index, where, climit);
                });
            }

            function addToQueue(promise) {
                queue.push(promise);
                processQueue();
            }

            function processQueue() {
                if (processing || queue.length === 0) {
                    return;
                }
                processing = true;
                var promise = queue.shift();

                promise().then(function(data) {
                    // 处理成功后的逻辑
                    if (data) {
                        datas.push(...data.data);
                        if(data.index>=end){
                            table.exportFile(ins1.config.id, datas, 'xls');
                            layer.close(loading);
                        }
                    }
                    processing = false;
                    processQueue();
                }).catch(function(error) {
                    // 处理失败后的逻辑
                    console.error(error);
                    processing = false;
                    processQueue();
                });
            }
        }
    };

    exports('exportExcelByAjax',obj.exportExcelByAjax);
});